    FILE: DDP_INTER:TOS      HEWLETT-PACKARD: DDP_INTERFACE  (c) Coleco 1983 Confidential          Mon, 21 May 1984, 16:35     Page   1

          1                         ;^Z80^
          3                         ;NAME ^Rev 01 - DTT^
          4
          5                         De_DDP_INTERFACE MACRO              ;Header Rev. 5
          6                                         .GOTO Ede_DDP_INTERFACE
          7
          8                          Project:      TAPE, C101
          9
         10                          ******************************
         11                          *                            *
         12                          *  DDP_INTERFACE      DTT    *
         13                          *                            *
         14                          ******************************
         15
         16                                Rev History
         17                                Rev.  Date         Name      Change
         18                                 1    9/13/83  DTT       CHANGED TO ALLOW ERROR RETIRES
         19                                 0    7/5/83   DTT       Initial Pseudo Code
         20
         21                         Function:
         22                                 REQUEST READS AND WRITES AS DEFINED IN OCB.
         23                                 REQUESTS ABORT_TAPE.
         24                                 TEST STATUS OF TAPE REQUEST.
         25
         26
         27                         Ede_DDP_INTERFACE  MEND
         28                         Pseudo_code_DDP_INTERFACE    MACRO  ;Pseudocode macro area
         29                                  BEGIN:
         30                                      STORE D_OVERLAY_NUMBER
         31                                      HL := POINTER TO OCB  := D_OVERLAY_NUMBER*5 + OVERLAY_TABLE_POINTER
         32                                      MOVE OCB TO D_CSA
         33                                      IF WRITE THEN
         34                                          SEND WRITE_COMMAND
         35                                      ELSE
         36                                          SEND READ_COMMAND
         37                                      ENDIF
         38                                  END
         39                                            .GOTO Ep_DDP_INTERFACE
         40
         41
         42
         43                         Ep_DDP_INTERFACE  MEND
         44
         45                         ;Subroutines called
         46                         ;       EXT
         47
         48                         ;Subroutines defined
         49                                 GLOBAL  TEST_TAPE
         50                                 GLOBAL  ABORT_TAPE
         51                                 GLOBAL  LOAD_OVERLAY
         52                                 GLOBAL  WRITE_OVERLAY
         53                                 GLOBAL  CALC_OCB_ADDR

    FILE: DDP_INTER:TOS      HEWLETT-PACKARD: DDP_INTERFACE  (c) Coleco 1983 Confidential          Mon, 21 May 1984, 16:35     Page   2

         54                                 GLOBAL  WRITE_BLOCKS
         55                                 GLOBAL  LOAD_BLOCKS
         56                                 GLOBAL  BLOCK_IO
         57                         ;       GLOBAL
         58
         59                         ;Operating system calls
         60                         ;       EXT
         61
         62                         ;Inputs/Outputs passed in registers
         63                         ;       A = OVERLAY NUMBER 1 thru N
         64                         ;       A <> 0 = ERROR
         65
         66                         ;External data areas used
         67                                 EXT     OCB_PTR                         ;POINTER TO OVERLAY CONTROL TABLE
         68
         69                         ;Global data areas defined
         70                                 GLOBAL D_OVERLAY_NUMBER
         71                                 GLOBAL D_TAPE_STATE
         72                                 GLOBAL D_CSA
         73                         ;       GLOBAL
         74
         75                         ;Local equates
         76                         ;       EQU
         77
         78                         ;Global equates
         79                                    GLOBAL READ_TAPE
         80                                    GLOBAL WRITE_TAPE
         81                                    GLOBAL KILL_TAPE
         82           0081          READ_TAPE  EQU    81H
         83           0082          WRITE_TAPE EQU    82H
         84           0087          KILL_TAPE  EQU    87H
         85                         ;      INCLUDE File_name:userid
         86
         87
         88                                 PROG
         89
         90                         ;       TEST FOR COMPLETION OF IO REQUEST
         91   0000'                 TEST_TAPE:
         92   0000' 3A 0000                LD A,(D_CSA)
         93   0003' B7                     OR A
         94   0004' C3 3D00'               JP       EXIT_TAPE
         95                         ;*
         96                         ;*
         97                         ;*
         98   0007'                 ABORT_TAPE:
         99   0007' 3E 87                   LD      A,KILL_TAPE
        100   0009' 32 0000                 LD      (D_CSA),A
        101   000C' C3 3D00'                JP      EXIT_TAPE
        102                         ;*
        103                         ;*
        104
        105   000F'                 CALC_OCB_ADDR:
        106   000F' 3D                     DEC     A                               ;ADDR = OCB_TABLE(OV_NUM-1*5)
        107   0010' 4F                     LD      C,A                             ;GET THE OVERLAY NUMBER IN C
        108   0011' 06 00                  LD      B,0
        109   0013' 2A 0000#               LD      HL,(OCB_PTR)                    ;POINTER TO THE OCB TABLE
        110   0016' 09                     ADD     HL,BC                           ;OCB_ADDR = OVERLAY_NUM*5 + START_OF_TABLE

    FILE: DDP_INTER:TOS      HEWLETT-PACKARD: DDP_INTERFACE  (c) Coleco 1983 Confidential          Mon, 21 May 1984, 16:35     Page   3

        111   0017' 09                     ADD     HL,BC
        112   0018' 09                     ADD     HL,BC
        113   0019' 09                     ADD     HL,BC
        114   001A' 09                     ADD     HL,BC
        115   001B' C9                     RET
        116                         ;*
        117   001C'                 WRITE_OVERLAY:
        118   001C' 37                     SCF                                     ;SET CARRY FLAG IF WRITE INSTRUCTION!
        119   001D' 18 01                  JR      LD_1
        120                         ;*
        121                         ;*
        122   001F'                 LOAD_OVERLAY:
        123   001F' B7                     OR      A                               ;RESET CARRY FLAG IF READ
        124                         ;*
        125                         ;*
        126   0020'                 LD_1:
        127                         ;  BEGIN       (Ordinarily registers are restored; retain only the pushes and pops you need.)
        128                         ;*
        129                         ;*
        130                         ;*
        131   0020' 32 0000                LD      (D_OVERLAY_NUMBER),A              ;FOR DEBUGGING PURPOSES
        132                         ;*
        133                         ;*
        134   0023' F5                     PUSH    AF  ;++++++++++++++++++++;
        135   0024' CD 0F00'               CALL    CALC_OCB_ADDR             ;
        136   0027' F1                     POP     AF  ;--------------------;       ;SAVE THE CARRY FLAG IF SET
        137                         ;*
        138   0028' 30 04                  JR      NC,LOAD_BLOCKS
        139
        140   002A'                 WRITE_BLOCKS:
        141   002A' 3E 82                   LD     A,WRITE_TAPE                    ;WRITE INSTRUCTIONS GO HERE
        142   002C' 18 02                   JR     BLOCK_IO
        143   002E'                 LOAD_BLOCKS:
        144   002E' 3E 81                   LD     A,READ_TAPE                     ;READ INSTRUCTIONS GO HERE
        145   0030'                 BLOCK_IO:
        146   0030' 11 0100                 LD     DE,D_CSA+1                 ;      ;POINT TO THE COMMAND STATUS AREA
        147   0033' 01 0500                 LD     BC,5                     ;      ;NUMBER OF BYTES TO MOVE
        148   0036' ED B0                   LDIR
        149   0038' 11 0000                 LD     DE,D_CSA
        150   003B' 12                      LD     (DE),A                          ;SET THE COMMAND IN THE D_CSA BUFFER
        151   003C' AF                      XOR    A
        152                                 GLOBAL  EXIT_TAPE
        153   003D'                 EXIT_TAPE:
        154   003D' C9                      RET

         0 Error(s) Detected.    62 Program Bytes.
        17 Symbols Detected.

    FILE: DDP_INTER:TOS      HEWLETT-PACKARD: DDP_INTERFACE  (c) Coleco 1983 Confidential          Mon, 21 May 1984, 16:35     Page   4

    Value   Symbol          Defined         Referenced:

    0007' ABORT_TAPE            98      50
    0030' BLOCK_IO             145      56   142
    000F' CALC_OCB_ADDR        105      53   135
    0000  D_CSA                         72    92   100   146   149
    0000  D_OVERLAY_NUMBER              70   131
    0000  D_TAPE_STATE                  71
    003D' EXIT_TAPE            153      94   101   152
    0087  KILL_TAPE             84      81    99
    0020' LD_1                 126     119
    002E' LOAD_BLOCKS          143      55   138
    001F' LOAD_OVERLAY         122      51
    0000# OCB_PTR                       67   109
    0081  READ_TAPE             82      79   144
    0000' TEST_TAPE             91      49
    002A' WRITE_BLOCKS         140      54
    001C' WRITE_OVERLAY        117      52
    0082  WRITE_TAPE            83      80   141